import axios from 'axios' // 引用axios
import { cookie } from '@/util/cookie.js' // 引用刚才我们创建的util.js文件，并使用getCookie方法
import requestParam from './params'
import { DES3 } from '@/assets/js/DES3.js'
// import { encryptByDESModeEBC, decryptByDESModeEBC } from '@/assets/js/mode-ecb.js'
import Qs from 'qs'
const secret = '8$T6acbOjB46nHoy&*dBaWS^YPUsMDJj'
var config = {
  // 请求的接口，在请求的时候，如axios.get(url,config);这里的url会覆盖掉config中的url
  'url': '/user',
  // 请求方法同上
  method: 'post', // default
  // 基础url前缀
  baseURL: process.env.NODE_ENV === 'production' ? '/iFengChao-Hui-Web/' : '/iFengChao-Hui-Web/iFengChao-Hui-Web/',

  transformRequest: [function (data) {
    // 这里可以在发送请求之前对请求数据做处理，比如form-data格式化等，这里可以使用开头引入的Qs（这个模块在安装axios的时候就已经安装了，不需要另外安装）
    let requestStr = DES3.encrypt(secret, JSON.stringify(data))
    data = Qs.stringify({ 'data': requestStr })
    return data
  }
  ],
  transformResponse: [function (data) {
    // 这里提前处理返回的数据
    data = JSON.parse(DES3.decrypt(secret, data))
    if (data) {
      return data
    }
  }
  ],
  // 请求头信息
  // headers: {
  //   'Content-Type': 'application/x-www-form-urlencoded', // 设置跨域头部
  //   'ifcToken': cookie('ifcToken')
  // },
  // parameter参数
  params: requestParam,
  // post参数，使用axios.post(url,{},config);如果没有额外的也必须要用一个空对象，否则会报错

  // 设置超时时间
  timeout: 5000
}

/**
 * fetch 请求方法
 * @param url
 * @param params
 * @returns {Promise}
 */
export function fetch (url, params = {}) {
  return new Promise((resolve, reject) => {
    axios.get(url, {
      params: params
    })
      .then(response => {
        resolve(response.data)
      })
      .catch(err => {
        reject(err)
      })
  })
}

export default {
  install: function (Vue) {
    Vue.prototype.$post = function (url, data = {}, confirm) {
      this.$dialog.loading.open(' ')
      var reg1 = /^0{4}[1-9]$/
      var reg2 = /^1\d{4}$/
      axios.defaults.headers.common['huiToken'] = cookie('huiToken')
      return new Promise((resolve, reject) => {
        axios.post(url, data, config)
          .then((res) => {
            this.$dialog.loading.close()
            if (reg1.test(res.data.resCode)) {
              this.$dialog.notify({
                mes: res.data.resMsg,
                timeout: 3000
              })
              return
            }
            if (!confirm && reg2.test(res.data.resCode)) {
              this.$dialog.notify({
                mes: res.data.resMsg,
                timeout: 3000
              })
              return
            }
            if (reg2.test(res.data.resCode) || res.data.resCode === '00000') {
              resolve(res.data)
            }
          }, (res) => {
            if (res.data) {
              this.$dialog.notify({
                mes: '提交数据出错！',
                timeout: 3000,
                callback: () => {
                  console.log('我走咯！')
                }
              })
            }
          })
      })
    }
  }
}
